/*****************************************Copyright(C)******************************************
****************************************** *********************************************
*------------------------------------------文件信息---------------------------------------------
* FileName          : protocol_adapter.c
* Author            : 张婷颖
* Version           : 1.0V
* Description       : 
*----------------------------------------历史版本信息-------------------------------------------
* History           :
* Description       :
*-----------------------------------------------------------------------------------------------
***********************************************************************************************/
/* Includes-----------------------------------------------------------------------------------*/
#include "protocol_adapter.h"
#include "bsp_uart.h"
#include "crc16.h"
#include "bsp_flash.h"
/* Private define-----------------------------------------------------------------------------*/

/* Private typedef----------------------------------------------------------------------------*/

/* Private macro------------------------------------------------------------------------------*/

/* Private variables--------------------------------------------------------------------------*/

/* Private function prototypes----------------------------------------------------------------*/

/* Private functions--------------------------------------------------------------------------*/
/************************************************
函数名称 ： analysis_adapter
功    能 ：在运行状态下，接收ubuntu信息，设置扩展板状态，并返回设置结果
参    数 ：pct 接收的信息，len 接收的长度
返 回 值 ：无
*************************************************/
void analysis_adapter(uint8_t *data,uint8_t len)
{
	if ((len == 3) && (data[0] == 0x68) && (data[1] == 0xAB) && (data[4] == 0x16)) //接到配置指令
	{
		uint8_t data_cmd[]={0xAB,0xAB,0xAB};//给网关
		Send_Data(&huart3, (uint8_t*)data_cmd, strlen(data_cmd));
	}
//	uint8_t ask_mmset[3] = {0};
//	uint16_t m_crc = 0,c_crc = 0;//用于存储计算出的CRC和接收到的CRC值的变量
//	uint8_t i = 0;
//	if((*pct == M_HEAD)&&(*(pct + len - 1) == M_END))
//	{
//		m_crc = Computer_CRC16(pct,len - 3);                                    //计算CRC
//		c_crc = (*(pct + len - 3)<<8)|(*(pct + len - 2));                       //CRC校验值  倒数2 3位
//		if(m_crc == c_crc)
//		{
//			edge_status = *(pct + 1);    //设置32状态改变
//			ask_mmset[i++] = edge_status;
//			ask_mmset[i++] = edge_status;
//			ask_mmset[i++] = edge_status;
//			Send_Data(&huart3, ask_mmset, i);                                   //反馈给麦尔通状态设置结果   huart3 是U3
//			//printf("The value of the string is: %s\n", ask_mmset);
//		}
//	}
}
/************************************************
函数名称 ： ask_adapter_ok
功    能 ：重启后向麦尔通响应重启成功（适配成功）
参    数 ：无
返 回 值 ：无
*************************************************/
void ask_adapter_ok(void)
{
	uint8_t ask_mmset[3] = {0};
	uint8_t i = 0;
	ask_mmset[i++] = edge_status;
	ask_mmset[i++] = edge_status;
	ask_mmset[i++] = edge_status;
	Send_Data(&huart3, ask_mmset, i);
}

///************************************************
//函数名称 ： analysis_pct_adapter
//功    能 ：在预启动状态下，接收PCT的信息，根据状态码解析信息，并处理（转发或者设置状态）
//参    数 ：pct 接收的信息，len 接收的长度
//返 回 值 ：无
//*************************************************/
//void analysis_pct_adapter(uint8_t *pct,uint8_t len)
//{
//	uint16_t m_crc = 0,c_crc = 0;
//	if((*pct == M_HEAD)&&(*(pct + len - 1) == M_END))
//	{
//		m_crc = Computer_CRC16(pct,len - 3);                                    //计算CRC
//		c_crc = (*(pct + len - 3)<<8)|(*(pct + len - 2));                       //CRC校验值  倒数2 3位
//		if(m_crc == c_crc)
//		{
//			switch(*(pct + 1))
//			{
//				case(M_EG):if(*(pct + 2) == M_R)
//						   	   read_edge();
//						   else
//							   set_edge(*(pct + 3));
//						   break;
//				case(M_CP):Send_Data(&huart2, pct, len);
//						   break;
//			}
//		}
//	}
//}
///************************************************
//函数名称 ： set_edge
//功    能 ：设置边缘网关状态,并向PCT返回响应
//参    数 ：set_status设置状态
//返 回 值 ：无
//*************************************************/
//void set_edge(EDGE_STATUS_T set_status)
//{
//	uint8_t ask_set[5] = {0};
//	uint8_t ask_mmset[3] = {0};                         //同时设置麦尔通状态
//	uint8_t i = 0,j = 0;
//	edge_status = set_status;
//
//	ask_set[i++] = M_HEAD;
//	ask_set[i++] = M_EG;
//	Computer_CRC16(ask_set, i);
//	ask_set[i++] = crcH;
//	ask_set[i++] = crcL;
//	ask_set[i++] = M_END;
//	Send_Data(&huart5, ask_set, i);
//
//	ask_mmset[j++] = set_status;
//	ask_mmset[j++] = set_status;
//	ask_mmset[j++] = set_status;
//	Send_Data(&huart2, ask_mmset, j);
//
//}
///************************************************
//函数名称 ： read_edge
//功    能 ：读取边缘网关状态，并向PCT返回响应
//参    数 ：无
//返 回 值 ：无
//*************************************************/
//void read_edge(void)
//{
//	uint8_t ask_read[6] = {0};
//	uint8_t i = 0;
//	ask_read[i++] = M_HEAD;
//	ask_read[i++] = M_EG;
//	ask_read[i++] = edge_status;
//	Computer_CRC16(ask_read, i);
//	ask_read[i++] = crcH;
//	ask_read[i++] = crcL;
//	ask_read[i++] = M_END;
//	Send_Data(&huart5, ask_read, i);
//}
//
///************************************************
//函数名称 ： whether_send_order
//功    能 ：start状态下，检测是否是发送指令，是转发给CP，不是不用管
//参    数 ：无
//返 回 值 ：无
//*************************************************/
//void whether_send_order(uint8_t *p,uint8_t len)
//{
//	if((*p == M_HEAD)&(*(p + len - 1) == M_END))
//	{
//		if((*(p + 1) == M_CP)&(*(p + 2) == M_CP_W))
//		{
//			if((*(p + 3) == CP_ORDER) & (*(p + 4) == SEND_ORDER))
//				Send_Data(&huart2, p, len);
//		}
//	}
//}
//
///************************************************
//函数名称 ： whether_send_order
//功    能 ：operate状态下，检测是否是设置为peroperate
//参    数 ：无
//返 回 值 ：无
//*************************************************/
//void whether_set_peroperate(uint8_t *p,uint8_t len)
//{
//	uint16_t m_crc = 0,c_crc = 0;
//	if((*p == M_HEAD)&&(*(p + len - 1) == M_END))
//	{
//		m_crc = Computer_CRC16(p,len - 3);                                  //计算CRC
//		c_crc = (*(p + len - 3)<<8)|(*(p + len - 2));                       //CRC校验值  倒数2 3位
//		if(m_crc == c_crc)
//		{
//			switch(*(p + 1))
//			{
//				case(M_EG):if(*(p + 2) == M_R)
//							   read_edge();
//						   else
//						   {
//							   if((*(p + 3) == EDGE_PREOPERATE)|(*(p + 3) == EDGE_OPERATE))
//								   set_edge(*(p + 3));
//						   }
//						   break;
//				case(M_CP):Send_Data(&huart2, p, len);
//						   break;
//			}
//		}
//	}
//}
///************************************************
//函数名称 ： ask_send_order_ok
//功    能 ：重启后向pct及麦尔通响应重启成功（下发指令成功）
//参    数 ：无
//返 回 值 ：无
//*************************************************/
//void ask_send_order_ok(void)
//{
//	uint8_t ask_mmset[3] = {0};
//	uint8_t i = 0;
//	ask_mmset[i++] = edge_status;
//	ask_mmset[i++] = edge_status;
//	ask_mmset[i++] = edge_status;
//	Send_Data(&huart2, ask_mmset, i);
//
//
//	uint8_t ask_order[8] = {0};
//	uint8_t j = 0;
//	ask_order[j++] = M_HEAD;
//	ask_order[j++] = M_CP;
//	ask_order[j++] = CP_ORDER;
//	ask_order[j++] = SEND_ORDER;
//	ask_order[j++] = 0x01;
//	Computer_CRC16(ask_order, j);
//	ask_order[j++] = crcH;
//	ask_order[j++] = crcL;
//	ask_order[j++] = M_END;
//	Send_Data(&huart5, ask_order, j);
//}
